package com.ruoyi.sms.controller;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.sms.domain.SyncMobile;
import com.ruoyi.sms.service.ISyncMobileService;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * swagger 渠道上报接口
 *
 * @author ruoyi
 */
@Api("渠道上报接口")
@RestController
@RequestMapping("/api/sync-mobile")
public class ApiSyncController extends BaseController {
    private static final Logger log = LoggerFactory.getLogger(ApiSyncController.class);

    @Autowired
    ISyncMobileService syncMobileService;

    /**
     * http://o.wangbaga.com/api/sync-mobile/process?key=alfsms@2018&mobile=18025337053&cpid=001
     * mobile	用户手机号	11位手机号，不含+86
     * cpid	渠道编号	字符串，由我司分配，例如：001
     * content	验证码内容	下发验证码的回复信息，允许为空
     * status	到达状态	取值DELIVRD为成功，其他情况均为失败或包月退订
     * key	校验码
     * content 您申请了手机号码注册，验证码为：627498，两分钟内有效。请在注册页面中输入以完成注册。【京东】
     * 附加资料：
     * 合作方接收成功返回结果：ok
     * 合作方接收失败返回结果：error=01（数值代表不同的错误信息）
     *
     * @return
     */
    @ApiOperation("上报手机号")
    @RequestMapping("/process")
    public String process(String key, String mobile, String cpid, String content) {
        try {
            if (StringUtils.isEmpty(cpid)) {
                return "error=01";
            }

            if (StringUtils.isEmpty(cpid) || StringUtils.isEmpty(key) || StringUtils.isEmpty(mobile)) {
                return "error=02";
            }

            if (mobile.length() > 11) {
                return "error=10";
            }

            if (StringUtils.isEmpty(cpid)) {
                return "error=01";
            }

            if (StringUtils.isEmpty(content)) {           //上报手机号
                check();        //同步检查是否之前上报过是否完成过
                SyncMobile syncMobile = new SyncMobile();
                setPhoneInfo(syncMobile);

                if (!StringUtils.isEmpty(syncMobile.getCity())) {
                    syncMobile.setPhone(mobile);
                    syncMobile.setSyncPhoneTime(new Date());
                    syncMobile.setCpid(cpid);
                    syncMobileService.insertSyncMobile(syncMobile);
                }

            } else {                                      //上报短信

            }
        } catch (Exception e) {
            log.error("上报接口出错", e);
            return "error=08";
        }
        return "error=09";
    }

    /**
     * 同步检查是否之前上报过是否完成过
     */
    private synchronized void check() {
        syncMobileService.checkOldSyncMobile();
    }

    private void setPhoneInfo(SyncMobile syncMobile) {
        String result = HttpUtils.sendGet("https://cx.shouji.360.cn/phonearea.php", "number=18665897376");
        JSONObject resultObj = JSONObject.parseObject(result.toString());
        JSONObject data = (JSONObject) resultObj.get("data");
        String province;
        String city;
        String sp;
        try {
            province = data.get("province").toString();
            city = data.get("city").toString();
            sp = data.get("sp").toString();

            syncMobile.setIsp(sp);
            syncMobile.setProvince(province);
            syncMobile.setCity(city);
        } catch (Exception e) {
            log.error("获取手机归属地isp异常", e);
        }
    }
//@ApiModel("用户实体")
//class UserEntity {
//    @ApiModelProperty("用户ID")
//    private Integer userId;
//
//    @ApiModelProperty("用户名称")
//    private String username;
//
//    @ApiModelProperty("用户密码")
//    private String password;
//
//    @ApiModelProperty("用户手机")
//    private String mobile;
//
//    public UserEntity() {
//
//    }
//
//    public UserEntity(Integer userId, String username, String password, String mobile) {
//        this.userId = userId;
//        this.username = username;
//        this.password = password;
//        this.mobile = mobile;
//    }
//
//    public Integer getUserId() {
//        return userId;
//    }
//
//    public void setUserId(Integer userId) {
//        this.userId = userId;
//    }
//
//    public String getUsername() {
//        return username;
//    }
//
//    public void setUsername(String username) {
//        this.username = username;
//    }
//
//    public String getPassword() {
//        return password;
//    }
//
//    public void setPassword(String password) {
//        this.password = password;
//    }
//
//    public String getMobile() {
//        return mobile;
//    }
//
//    public void setMobile(String mobile) {
//        this.mobile = mobile;
//    }
}
